/**
 * AI API接口封装
 * 用于调用AiController的接口
 */

import { getCurrentConfig } from './config.js'

// 获取当前配置
const config = getCurrentConfig()

/**
 * 通用请求方法
 * @param {string} url 请求地址
 * @param {object} options 请求选项
 * @param {boolean} isAIRequest 是否为AI接口请求（使用8083端口）
 * @returns {Promise} 请求结果
 */
function request(url, options = {}, isAIRequest = false) {
  return new Promise((resolve, reject) => {
    // AI接口使用8083端口，其他接口使用8080端口
    let baseURL
    if (isAIRequest) {
      baseURL = config.authBaseURL // 8083端口
    } else {
      baseURL = config.baseURL.replace('/api', '') // 8080端口，移除/api后缀
    }
    
    uni.request({
      url: `${baseURL}${url}`,
      method: options.method || 'GET',
      data: options.data || {},
      header: {
        'Content-Type': 'application/json',
        ...options.header
      },
      success: (res) => {
        if (res.statusCode === 200) {
          resolve(res.data)
        } else {
          reject(new Error(`请求失败: ${res.statusCode}`))
        }
      },
      fail: (err) => {
        reject(new Error(`网络请求失败: ${err.errMsg}`))
        console.error('AI API请求失败:', err)
      }
    })
  })
}

/**
 * AI对话接口
 * 调用AiController的/chat接口
 * @param {object} data 对话数据
 * @param {string} data.message 用户消息
 * @param {string} data.context 对话上下文（可选）
 * @param {string} data.imageUrl 图片URL（可选，用于图片识别）
 * @returns {Promise} AI回复结果
 */
export function chatWithAI(data) {
  // 构建请求数据
  const requestData = {
    message: data.message
  }
  
  // 如果有图片，可以在这里处理图片上传逻辑
  if (data.imageUrl) {
    // 这里可以添加图片上传到服务器的逻辑
    // 然后将图片URL添加到请求中
    requestData.imageUrl = data.imageUrl
  }
  
  return request('/XinAi/chat', {
    method: 'POST',
    data: requestData
  }, true) // 标记为AI接口请求，使用8083端口
}

/**
 * 获取AI配置状态
 * 调用AiController的/config/status接口
 * @returns {Promise} 配置状态
 */
export function getAIConfigStatus() {
  return request('/XinAi/config/status', {}, true) // 标记为AI接口请求
}

/**
 * 测试AI连接
 * 调用AiController的/test接口
 * @returns {Promise} 测试结果
 */
export function testAIConnection() {
  return request('/XinAi/test', {}, true) // 标记为AI接口请求
}

/**
 * AI健康检查
 * 调用AiController的/health接口
 * @returns {Promise} 健康状态
 */
export function checkAIHealth() {
  return request('/XinAi/health', {}, true) // 标记为AI接口请求
}

/**
 * 图片上传接口（如果需要）
 * @param {string} filePath 图片文件路径
 * @returns {Promise} 上传结果
 */
export function uploadImage(filePath) {
  return new Promise((resolve, reject) => {
    uni.uploadFile({
      url: `${AI_BASE_URL}/upload/image`, // 这个接口需要您在后端实现
      filePath: filePath,
      name: 'image',
      success: (res) => {
        try {
          const data = JSON.parse(res.data)
          resolve(data)
        } catch (e) {
          reject(new Error('上传响应解析失败'))
        }
      },
      fail: (err) => {
        reject(new Error(`图片上传失败: ${err.errMsg}`))
      }
    })
  })
}

/**
 * 育儿建议专用接口
 * 针对育儿场景优化的AI对话
 * @param {object} data 育儿问题数据
 * @param {string} data.question 育儿问题
 * @param {string} data.childAge 孩子年龄（可选）
 * @param {string} data.behavior 具体行为描述（可选）
 * @param {string} data.imageUrl 相关图片（可选）
 * @returns {Promise} AI育儿建议
 */
export function getParentingAdvice(data) {
  // 构建专业的育儿问题描述
  let enhancedMessage = `育儿咨询：${data.question}`
  
  if (data.childAge) {
    enhancedMessage += `\n孩子年龄：${data.childAge}`
  }
  
  if (data.behavior) {
    enhancedMessage += `\n具体行为：${data.behavior}`
  }
  
  if (data.imageUrl) {
    enhancedMessage += `\n相关图片：已上传`
  }
  
  enhancedMessage += `\n\n请从专业育儿角度给出建议，包括：\n1. 行为分析\n2. 可能原因\n3. 沟通建议\n4. 教育方法\n5. 注意事项`
  
  return chatWithAI({
    message: enhancedMessage,
    context: '育儿心理咨询',
    imageUrl: data.imageUrl
  })
}

/**
 * 图片行为分析接口
 * 专门用于分析孩子行为图片
 * @param {string} imageUrl 图片URL
 * @param {string} description 图片描述（可选）
 * @returns {Promise} 图片分析结果
 */
export function analyzeBehaviorImage(imageUrl, description = '') {
  let message = '请分析这张图片中孩子的行为表现，并给出专业的育儿建议。'
  
  if (description) {
    message += `\n\n图片描述：${description}`
  }
  
  message += `\n\n请从以下角度分析：\n1. 行为表现识别\n2. 情绪状态分析\n3. 发展水平评估\n4. 教育建议\n5. 注意事项`
  
  return chatWithAI({
    message: message,
    context: '图片行为分析',
    imageUrl: imageUrl
  })
}

/**
 * 设置AI服务地址
 * @param {string} baseUrl 新的基础URL
 */
export function setAIBaseURL(baseUrl) {
  AI_BASE_URL = baseUrl
}

/**
 * 获取当前AI服务地址
 * @returns {string} 当前基础URL
 */
export function getAIBaseURL() {
  return AI_BASE_URL
}

export default {
  chatWithAI,
  getAIConfigStatus,
  testAIConnection,
  checkAIHealth,
  uploadImage,
  getParentingAdvice,
  analyzeBehaviorImage,
  setAIBaseURL,
  getAIBaseURL
} 